package advanced进阶;

/**
 * CountDownLatch同时等待N个任务执行完成，当N个任务执行完成之后，再执行后续的操作
 * CountDownLatch(int count)//要等待多少个线程执行完成
 * await()//等待计数器为0，所有的线程都已经完成任务
 * countDown()线程执行完之后，必须调用countDown
 * CountDownLatch经常和Callable同时使用
 *
 * CyclicBarrier循环栅栏，循环门
 * cyclic循环的
 * await()表示当前线程已经到达栅栏，等待其他线程
 *
 * 都是等待N个线程
 * CountDownLatch 是等待所有线程执行完成
 * CyclicBarri 是等待所有线程初始化，然后所有线程开始执行
 *
 * 区别：
 * 1.CyclicBarrier循环栅栏可以循环使用，CountDownLatch不可以重置，不能循环使用
 *   CyclicBarrier当所有线程到达栅栏之后，就会自动重置
 * 2.使用场景不同
 * 3.底层实现不同
 *   CountDownLatch是基于AQS实现
 *   CyclicBarrier基于ReentrantLock实现
 *
 */
public class CountDownLatch {
}
